--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_android_codec2.py e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 6.54 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3patch
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatx Tff7b72import Te6edf3android_codec2
Tff7b72def Td2a8fftest_ensure_codec2_skips_non_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3android_codec2Tff7b72.Td2a8ffreset_codec2_preload_state_for_testsTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3android_codec2Tb4b4b4, Ta5d6ff"Ta5d6ff_is_chaquopy_androidTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3android_codec2Tff7b72.Td2a8ffensure_codec2_native_libraryTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3android_codec2Tff7b72.Td2a8ffcodec2_preload_errorTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_ensure_codec2_loads_bundled_libraryTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3lib Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"
Te6edf3libTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x7fTa5d6ffELFTa5d6ff"Tb4b4b4)
Te6edf3android_codec2Tff7b72.Td2a8ffreset_codec2_preload_state_for_testsTb4b4b4(Tb4b4b4)
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3android_codec2Tb4b4b4, Ta5d6ff"Ta5d6ff_is_chaquopy_androidTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(
Te6edf3android_codec2Tb4b4b4,
Ta5d6ff"Ta5d6ff_cdll_loadTa5d6ff"Tb4b4b4,
Te6edf3side_effectTff7b72=Tb4b4b4[Tf85149OSErrorTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72NoneTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3cdllTb4b4b4,
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(
Te6edf3android_codec2Tb4b4b4,
Ta5d6ff"Ta5d6ff_libcodec2_candidatesTa5d6ff"Tb4b4b4,
Te6edf3return_valueTff7b72=Tb4b4b4[Te6edf3libTb4b4b4]Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3android_codec2Tff7b72.Td2a8ffensure_codec2_native_libraryTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3cdllTff7b72.Td2a8ffcall_count Tff7b72== T79c0ff2
Tff7b72assert Te6edf3cdllTff7b72.Td2a8ffcall_args_listTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffargsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"
Tff7b72assert Te6edf3cdllTff7b72.Td2a8ffcall_args_listTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffargsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Tffa657strTb4b4b4(Te6edf3libTb4b4b4)
Tff7b72def Td2a8fftest_libcodec2_candidates_find_without_importing_pycodec2Tb4b4b4(Te6edf3tmp_pathTb4b4b4, Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
T8b949e"""Discovery must not import pycodec2 (extension needs libcodec2 already loaded)."""
Te6edf3site Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsite-packagesTa5d6ff"
Te6edf3pkg Tff7b72= Te6edf3site Tff7b72/ Ta5d6ff"Ta5d6ffpycodec2Ta5d6ff"
Te6edf3pkgTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3lib Tff7b72= Te6edf3pkg Tff7b72/ Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"
Te6edf3libTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x7fTa5d6ffELFTa5d6ff"Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffsyspath_prependTb4b4b4(Tffa657strTb4b4b4(Te6edf3siteTb4b4b4)Tb4b4b4)
Tff7b72import T7ee787builtins
Te6edf3real_import Tff7b72= Te6edf3builtinsTff7b72.Td2a8ff__import__
Tff7b72def Td2a8fffake_importTb4b4b4(Te6edf3nameTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3name Tff7b72== Ta5d6ff"Ta5d6ffpycodec2Ta5d6ff" Tff7b72or Te6edf3nameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffpycodec2.Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ImportErrorTb4b4b4(Ta5d6ff"Ta5d6ffpycodec2 must not be imported during candidate searchTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3real_importTb4b4b4(Te6edf3nameTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffbuiltins.__import__Ta5d6ff"Tb4b4b4, Te6edf3side_effectTff7b72=Te6edf3fake_importTb4b4b4)Tb4b4b4:
Te6edf3candidates Tff7b72= Te6edf3android_codec2Tff7b72.Td2a8ff_libcodec2_candidatesTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3libTff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4) Tff7b72in Tb4b4b4[Te6edf3cTff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3c Tff7b72in Te6edf3candidatesTb4b4b4]
Tff7b72def Td2a8fftest_probe_pycodec2_reports_failure_when_import_breaksTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3android_codec2Tff7b72.Td2a8ffreset_codec2_preload_state_for_testsTb4b4b4(Tb4b4b4)
Te6edf3android_codec2Tff7b72.Td2a8ff_codec2_preload_done Tff7b72= Tff7b72True
Te6edf3android_codec2Tff7b72.Td2a8ff_codec2_preload_error Tff7b72= Tff7b72None
Tff7b72with Tb4b4b4(
Te6edf3patchTff7b72.Td2a8ffobjectTb4b4b4(Te6edf3android_codec2Tb4b4b4, Ta5d6ff"Ta5d6ff_is_chaquopy_androidTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72.Td2a8ffdictTb4b4b4(Ta5d6ff"Ta5d6ffsys.modulesTa5d6ff"Tb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffpycodec2Ta5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72import T7ee787builtins
Te6edf3real_import Tff7b72= Te6edf3builtinsTff7b72.Td2a8ff__import__
Tff7b72def Td2a8fffake_importTb4b4b4(Te6edf3nameTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3name Tff7b72== Ta5d6ff"Ta5d6ffpycodec2Ta5d6ff"Tb4b4b4:
Tff7b72raise Tf85149ImportErrorTb4b4b4(Ta5d6ff"Ta5d6ffno pycodec2Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3real_importTb4b4b4(Te6edf3nameTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffbuiltins.__import__Ta5d6ff"Tb4b4b4, Te6edf3side_effectTff7b72=Te6edf3fake_importTb4b4b4)Tb4b4b4:
Te6edf3okTb4b4b4, Te6edf3err Tff7b72= Te6edf3android_codec2Tff7b72.Td2a8ffprobe_pycodec2Tb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3ok Tff7b72is Tff7b72False
Tff7b72assert Te6edf3err
Tff7b72def Td2a8fftest_vendor_wheels_bundle_libcodec2_for_all_abisTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72import T7ee787zipfile
Te6edf3repo Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentsTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3vendor Tff7b72= Te6edf3repo Tff7b72/ Ta5d6ff"Ta5d6ffandroidTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffvendorTa5d6ff"
Tff7b72if Tff7b72not Te6edf3vendorTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3pytestTff7b72.Td2a8ffskipTb4b4b4(Ta5d6ff"Ta5d6ffandroid/vendor not present (gitignored)Ta5d6ff"Tb4b4b4)
Te6edf3abis Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffarm64_v8aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffarmeabi_v7aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3abi Tff7b72in Te6edf3abisTb4b4b4:
Te6edf3wheels Tff7b72= Tffa657sortedTb4b4b4(Te6edf3vendorTff7b72.Td2a8ffglobTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffpycodec2-*-android_24_Tffd700{Te6edf3abiTffd700}Ta5d6ff.whlTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3wheelsTb4b4b4:
Te6edf3pytestTff7b72.Td2a8ffskipTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffmissing pycodec2 wheel for Tffd700{Te6edf3abiTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3wheelsTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72as Te6edf3zinTb4b4b4:
Tff7b72assert Ta5d6ff"Ta5d6ffpycodec2/libcodec2.soTa5d6ff" Tff7b72in Te6edf3zinTff7b72.Td2a8ffnamelistTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffpycodec2/pycodec2.soTa5d6ff" Tff7b72in Te6edf3zinTff7b72.Td2a8ffnamelistTb4b4b4(Tb4b4b4)
Te6edf3lib_wheels Tff7b72= Tffa657sortedTb4b4b4(Te6edf3vendorTff7b72.Td2a8ffglobTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffchaquopy_libcodec2-*-android_24_Tffd700{Te6edf3abiTffd700}Ta5d6ff.whlTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3lib_wheelsTb4b4b4:
Te6edf3pytestTff7b72.Td2a8ffskipTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffmissing chaquopy_libcodec2 for Tffd700{Te6edf3abiTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3lib_wheelsTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72as Te6edf3zinTb4b4b4:
Tff7b72assert Ta5d6ff"Ta5d6ffchaquopy/lib/libcodec2.soTa5d6ff" Tff7b72in Te6edf3zinTff7b72.Td2a8ffnamelistTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_jni_libs_synced_for_all_abisTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3repo Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentsTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3jni Tff7b72= Te6edf3repo Tff7b72/ Ta5d6ff"Ta5d6ffandroidTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffappTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffmainTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffjniLibsTa5d6ff"
Tff7b72for Te6edf3abi Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffarm64-v8aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffarmeabi-v7aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3lib Tff7b72= Te6edf3jni Tff7b72/ Te6edf3abi Tff7b72/ Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"
Tff7b72if Tff7b72not Te6edf3libTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3pytestTff7b72.Td2a8ffskipTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffmissing jniLibs Tffd700{Te6edf3libTffd700}Ta5d6ff — not an Android buildTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3libTff7b72.Td2a8ffstatTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffst_size Tff7b72> T79c0ff100_000
Tff7b72def Td2a8fftest_android_lxst_wheel_get_codec_guards_missing_codec2Tb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72import T7ee787zipfile
Te6edf3repo Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentsTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3whl Tff7b72= Te6edf3repo Tff7b72/ Ta5d6ff"Ta5d6ffandroidTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffvendorTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6fflxst-0.4.8-py3-none-any.whlTa5d6ff"
Tff7b72if Tff7b72not Te6edf3whlTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3pytestTff7b72.Td2a8ffskipTb4b4b4(Ta5d6ff"Ta5d6ffandroid/vendor/lxst wheel not present (gitignored)Ta5d6ff"Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3whlTb4b4b4) Tff7b72as Te6edf3zinTb4b4b4:
Te6edf3telephony Tff7b72= Te6edf3zinTff7b72.Td2a8ffreadTb4b4b4(Ta5d6ff"Ta5d6ffLXST/Primitives/Telephony.pyTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4)
Te6edf3codecs_init Tff7b72= Te6edf3zinTff7b72.Td2a8ffreadTb4b4b4(Ta5d6ff"Ta5d6ffLXST/Codecs/__init__.pyTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffif Codec2 is not None:Ta5d6ff" Tff7b72in Te6edf3telephony
Tff7b72assert Ta5d6ff"Ta5d6ff_CODEC2_IMPORT_ERRORTa5d6ff" Tff7b72in Te6edf3codecs_init
Tff7b72def Td2a8fftest_repack_script_bundles_libcodec2Tb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787importlibT7ee787.T7ee787util
Tff7b72import T7ee787zipfile
Te6edf3repo_root Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentsTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3script Tff7b72= Te6edf3repo_root Tff7b72/ Ta5d6ff"Ta5d6ffscriptsTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffrepack-android-pycodec2-wheels.pyTa5d6ff"
Te6edf3spec Tff7b72= Te6edf3importlibTff7b72.Td2a8ffutilTff7b72.Td2a8ffspec_from_file_locationTb4b4b4(Ta5d6ff"Ta5d6ffrepack_pycodec2Ta5d6ff"Tb4b4b4, Te6edf3scriptTb4b4b4)
Te6edf3repack_mod Tff7b72= Te6edf3importlibTff7b72.Td2a8ffutilTff7b72.Td2a8ffmodule_from_specTb4b4b4(Te6edf3specTb4b4b4)
Te6edf3specTff7b72.Td2a8ffloaderTff7b72.Td2a8ffexec_moduleTb4b4b4(Te6edf3repack_modTb4b4b4)
Te6edf3repack_pycodec2_wheel Tff7b72= Te6edf3repack_modTff7b72.Td2a8ffrepack_pycodec2_wheel
Te6edf3lib_wheel Tff7b72= Tb4b4b4(
Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffchaquopy_libcodec2-1.2.0-0-py3-none-android_24_arm64_v8a.whlTa5d6ff"
Tb4b4b4)
Te6edf3py_wheel Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpycodec2-4.1.1-0-cp311-cp311-android_24_arm64_v8a.whlTa5d6ff"
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3lib_wheelTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zoutTb4b4b4:
Te6edf3zoutTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ffchaquopy/lib/libcodec2.soTa5d6ff"Tb4b4b4, Ta5d6ffbTa5d6ff"Tffea00\x7fTa5d6ffELF-libTa5d6ff"Tb4b4b4)
Te6edf3record Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffpycodec2/pycodec2.so,sha256=deadbeef,8Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ffpycodec2.dist-info/METADATA,sha256=deadbeef,4Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ffpycodec2.dist-info/RECORD,,Tffea00\nTa5d6ff"
Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3py_wheelTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zoutTb4b4b4:
Te6edf3zoutTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ffpycodec2/pycodec2.soTa5d6ff"Tb4b4b4, Ta5d6ffbTa5d6ff"Tffea00\x7fTa5d6ffELF-modTa5d6ff"Tb4b4b4)
Te6edf3zoutTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ffpycodec2.dist-info/METADATATa5d6ff"Tb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ffmetaTa5d6ff"Tb4b4b4)
Te6edf3zoutTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ffpycodec2.dist-info/RECORDTa5d6ff"Tb4b4b4, Te6edf3recordTb4b4b4)
Te6edf3lib_src Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6fflibcodec2.soTa5d6ff"
Te6edf3lib_srcTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x7fTa5d6ffELF-libTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3repack_pycodec2_wheelTb4b4b4(Te6edf3py_wheelTb4b4b4, Te6edf3lib_srcTb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3py_wheelTb4b4b4) Tff7b72as Te6edf3zinTb4b4b4:
Te6edf3names Tff7b72= Te6edf3zinTff7b72.Td2a8ffnamelistTb4b4b4(Tb4b4b4)
Te6edf3record_text Tff7b72= Te6edf3zinTff7b72.Td2a8ffreadTb4b4b4(Ta5d6ff"Ta5d6ffpycodec2.dist-info/RECORDTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffpycodec2/libcodec2.soTa5d6ff" Tff7b72in Te6edf3names
Tff7b72assert Ta5d6ff"Ta5d6ff,,Tffea00\nTa5d6ff" Tff7b72not Tff7b72in Te6edf3record_text
Tff7b72for Te6edf3line Tff7b72in Te6edf3record_textTff7b72.Td2a8ffsplitlinesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3size_field Tff7b72= Te6edf3lineTff7b72.Td2a8ffrsplitTb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72assert Te6edf3size_field
Tffa657intTb4b4b4(Te6edf3size_fieldTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────